﻿using UnityEngine;
using System.Collections;

public class BackgroundPropSpawner : MonoBehaviour
{
    public Rigidbody2D backgroundProp;       // 需要实例化的道具（预制体）
    public float leftSpawnPosX;              // 左侧生成位置的X坐标
    public float rightSpawnPosX;             // 右侧生成位置的X坐标
    public float minSpawnPosY;               // 生成位置的最小Y坐标
    public float maxSpawnPosY;               // 生成位置的最大Y坐标
    public float minTimeBetweenSpawns = 5;       // 生成间隔的最短时间
    public float maxTimeBetweenSpawns = 20;      // 生成间隔的最长时间
    public float minSpeed = 5;                   // 道具的最小移动速度
    public float maxSpeed = 8;                  // 道具的最大移动速度

    void Start()
    {
        // 设置随机种子，确保每次游戏生成的随机数不同
        Random.InitState(System.DateTime.Today.Millisecond);

        // 启动生成协程
        StartCoroutine("Spawn");
    }

    IEnumerator Spawn()
    {
        float waitTime = Random.Range(minTimeBetweenSpawns, maxTimeBetweenSpawns); // 随机生成下一次生成道具的等待时间
        yield return new WaitForSeconds(waitTime);

        bool facingLeft = Random.Range(0, 2) == 0;// 随机决定道具是朝左还是朝右 ； 它的行为是 包含 min，但不包含 max ； ==是为了变成bool
        float posX = facingLeft ? rightSpawnPosX : leftSpawnPosX;
        float posY = Random.Range(minSpawnPosY, maxSpawnPosY);   
        Vector3 spawnPos = new Vector3(posX, posY, transform.position.z);// 设置道具的生成位置

        // 不要设置为预设体，实例化的预设体会看不见
        Rigidbody2D propInstance = Instantiate(backgroundProp, spawnPos, Quaternion.identity) as Rigidbody2D;

        // 道具的精灵默认朝左，如果需要朝右则翻转X轴缩放
        if (!facingLeft)
        {
            // 翻转X轴缩放
            Vector3 scale = propInstance.transform.localScale;
            scale.x *= -1;
            propInstance.transform.localScale = scale;
        }

        float speed = Random.Range(minSpeed, maxSpeed); // 随机生成移动速度
        speed *= facingLeft ? -1f : 1f; // 如果道具朝左，速度取反
        propInstance.velocity = new Vector2(speed, 0);  // 设置道具的X轴速度

        // 重新启动协程
        StartCoroutine(Spawn());

        // 当道具存在时持续检测
        while (propInstance != null)
        {
            // 如果道具朝左
            if (facingLeft)
            {        
                if (propInstance.transform.position.x < leftSpawnPosX - 0.5f)// 如果道具超出左侧边界销毁道具
                    Destroy(propInstance.gameObject);
            }
            else
            {
                if (propInstance.transform.position.x > rightSpawnPosX + 0.5f)
                    Destroy(propInstance.gameObject);
            }

            // 等待下一帧再继续检测
            yield return null;
        }
    }
}